<?php

class HttpAjax extends TPage {
//<editor-fold defaultstate="collapsed" desc="AutocompletarCategoria">
  /**
   * obtiene listado de categorias para poder autocompletar
   * @author VSR, 01/01/2011
   */
  private function autocompletarCategoria() {
    $retorno = "";
    $textoBusquedaOriginal = $this->Request["term"];
    $textoBusqueda = strtolower($this->Request["term"]);
    $sb = new StringBuilder();
    $templateJSON = "{\"label\":\"{#LABEL}\",\"value\":\"{#VALUE}\"}";
    $auxTemplateJSON = "";

    try {
      $arr = Pagina::autocompletarCategoria(str_replace("%", "", $textoBusquedaOriginal));
      if(is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      if($totalRegistros > 0) {
        for($i = 0; $i <= $totalRegistros - 1; $i++) {
          $auxTemplateJSON = $templateJSON;
          //asigna valores del dataset
          $row = $arr[$i];
          $valor = trim($row["Nombre"]);
          $valorConEstilo = str_replace($textoBusqueda, "<b>".strtolower($textoBusqueda)."</b>", strtolower($valor));

          //reemplaza las marcas por los valores reales
          $auxTemplateJSON = str_replace("{#LABEL}", $valorConEstilo, $auxTemplateJSON);
          $auxTemplateJSON = str_replace("{#VALUE}", Utilidades::escaparComillasJS($valor), $auxTemplateJSON);
          $sb->append($auxTemplateJSON);
          if($i < $totalRegistros - 1) { $sb->append(","); }
        }
      } else {
        $sb->append("");
      }
    } catch (Exception $e) {
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      if(is_null($oUsuario)) {
        $sb->append("{\"label\":\"<span class='cssMensajeError'>Su sesi&oacute;n ha finalizado.<br/>Cierre la sesi&oacute;n actual y vuelva a ingresar para poder operar de manera correcta en el sistema.</span>\",\"value\":\"\"}");
      } else {
        $sb->append("{\"label\":\"<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.<br/>Int&eacute;ntelo m&aacute;s tarde por favor.</span>\",\"value\":\"\"}");
      }
    }
    //asigna valor
    $retorno = "[".$sb->toString()."]";
    return $retorno;

  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="AutocompletarModulo">
  /**
   * obtiene listado de modulos para poder autocompletar
   * @author VSR, 01/01/2011
   */
  private function autocompletarModulo() {
    $retorno = "";
    $textoBusquedaOriginal = $this->Request["term"];
    $textoBusqueda = strtolower($this->Request["term"]);
    $sb = new StringBuilder();
    $templateJSON = "{\"label\":\"{#LABEL}\",\"value\":\"{#VALUE}\"}";
    $auxTemplateJSON = "";

    try {
      $arr = Pagina::autocompletarModulo(str_replace("%", "", $textoBusquedaOriginal));
      if(is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      if($totalRegistros > 0) {
        for($i = 0; $i <= $totalRegistros - 1; $i++) {
          $auxTemplateJSON = $templateJSON;
          //asigna valores del dataset
          $row = $arr[$i];
          $valor = trim($row["Modulo"]);
          $valorConEstilo = str_replace($textoBusqueda, "<b>".strtolower($textoBusqueda)."</b>", strtolower($valor));

          //reemplaza las marcas por los valores reales
          $auxTemplateJSON = str_replace("{#LABEL}", $valorConEstilo, $auxTemplateJSON);
          $auxTemplateJSON = str_replace("{#VALUE}", Utilidades::escaparComillasJS($valor), $auxTemplateJSON);
          $sb->append($auxTemplateJSON);
          if($i < $totalRegistros - 1) { $sb->append(","); }
        }
      } else {
        $sb->append("");
      }
    } catch (Exception $e) {
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      if(is_null($oUsuario)) {
        $sb->append("{\"label\":\"<span class='cssMensajeError'>Su sesi&oacute;n ha finalizado.<br/>Cierre la sesi&oacute;n actual y vuelva a ingresar para poder operar de manera correcta en el sistema.</span>\",\"value\":\"\"}");
      } else {
        $sb->append("{\"label\":\"<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.<br/>Int&eacute;ntelo m&aacute;s tarde por favor.</span>\",\"value\":\"\"}");
      }
    }
    //asigna valor
    $retorno = "[".$sb->toString()."]";
    return $retorno;

  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="AutocompletarControlHtml">
  /**
   * obtiene listado de controles html ingresados en notificacion para poder autocompletar
   * @author VSR, 13/04/2011
   */
  private function autocompletarControlHtml() {
    $retorno = "";
    $textoBusquedaOriginal = $this->Request["term"];
    $textoBusqueda = strtolower($this->Request["term"]);
    $sb = new StringBuilder();
    $templateJSON = "{\"label\":\"{#LABEL}\",\"value\":\"{#VALUE}\"}";
    $auxTemplateJSON = "";

    try {
      $arr = Notificacion::autocompletarControlHtml(str_replace("%", "", $textoBusquedaOriginal));
      if(is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      if($totalRegistros > 0) {
        for($i = 0; $i <= $totalRegistros - 1; $i++) {
          $auxTemplateJSON = $templateJSON;
          //asigna valores del dataset
          $row = $arr[$i];
          $valor = trim($row["ControlHtmlAsociado"]);
          $valorConEstilo = str_replace($textoBusqueda, "<b>".strtolower($textoBusqueda)."</b>", strtolower($valor));

          //reemplaza las marcas por los valores reales
          $auxTemplateJSON = str_replace("{#LABEL}", $valorConEstilo, $auxTemplateJSON);
          $auxTemplateJSON = str_replace("{#VALUE}", Utilidades::escaparComillasJS($valor), $auxTemplateJSON);
          $sb->append($auxTemplateJSON);
          if($i < $totalRegistros - 1) { $sb->append(","); }
        }
      } else {
        $sb->append("");
      }
    } catch (Exception $e) {
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      if(is_null($oUsuario)) {
        $sb->append("{\"label\":\"<span class='cssMensajeError'>Su sesi&oacute;n ha finalizado.<br/>Cierre la sesi&oacute;n actual y vuelva a ingresar para poder operar de manera correcta en el sistema.</span>\",\"value\":\"\"}");
      } else {
        $sb->append("{\"label\":\"<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.<br/>Int&eacute;ntelo m&aacute;s tarde por favor.</span>\",\"value\":\"\"}");
      }
    }
    //asigna valor
    $retorno = "[".$sb->toString()."]";
    return $retorno;

  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="AutocompletarPaginaAsociada">
  /**
   * obtiene listado de paginas registradas en el sistema para autocompletar
   * @author VSR, 17/04/2011
   */
  private function autocompletarPaginaAsociada() {
    $retorno = "";
    $textoBusquedaOriginal = $this->Request["term"];
    $textoBusqueda = strtolower($this->Request["term"]);
    $sb = new StringBuilder();
    $templateJSON = "{\"label\":\"{#LABEL}\",\"value\":\"{#VALUE}\"}";
    $auxTemplateJSON = "";

    try {
      $arr = Notificacion::autocompletarPaginaAsociada(str_replace("%", "", $textoBusquedaOriginal));
      if(is_null($arr)) {
        $totalRegistros = 0;
      } else {
        $totalRegistros = count($arr);
      }

      if($totalRegistros > 0) {
        for($i = 0; $i <= $totalRegistros - 1; $i++) {
          $auxTemplateJSON = $templateJSON;
          //asigna valores del dataset
          $row = $arr[$i];
          $valor = trim($row["PaginaAsociada"]);
          $valorConEstilo = str_replace($textoBusqueda, "<b>".strtolower($textoBusqueda)."</b>", strtolower($valor));

          //reemplaza las marcas por los valores reales
          $auxTemplateJSON = str_replace("{#LABEL}", $valorConEstilo, $auxTemplateJSON);
          $auxTemplateJSON = str_replace("{#VALUE}", Utilidades::escaparComillasJS($valor), $auxTemplateJSON);
          $sb->append($auxTemplateJSON);
          if($i < $totalRegistros - 1) { $sb->append(","); }
        }
      } else {
        $sb->append("");
      }
    } catch (Exception $e) {
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      if(is_null($oUsuario)) {
        $sb->append("{\"label\":\"<span class='cssMensajeError'>Su sesi&oacute;n ha finalizado.<br/>Cierre la sesi&oacute;n actual y vuelva a ingresar para poder operar de manera correcta en el sistema.</span>\",\"value\":\"\"}");
      } else {
        $sb->append("{\"label\":\"<span class='cssMensajeError'>Ha ocurrido un error interno y no se pudo obtener el valor.<br/>Int&eacute;ntelo m&aacute;s tarde por favor.</span>\",\"value\":\"\"}");
      }
    }
    //asigna valor
    $retorno = "[".$sb->toString()."]";
    return $retorno;

  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="VerificarDuplicidadNombre">
  /**
   * verifica si el nombre ya existe en base de datos
   * @return string
   * @author VSR, 01/01/2011
   */
  private function verificarDuplicidadNombre(){
    $existe = "0";
    $id = urldecode(Utilidades::isNull($this->Request["id"],"-1"));
    $valor = urldecode(Utilidades::isNull($this->Request["valor"],"-1"));

    try {
      $existe = Pagina::verificarDuplicidad($id, $valor, "ModuloNombreClase");
    } catch (Exception $e) {
      $existe = "0";
    }
    return $existe;
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="VerificarEliminacionFuncion">
  /**
   * verifica si puede eliminar la funcion, si es que no esta utilizada en otro lado
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function verificarEliminacionFuncion() {
    $retorno = "";
    $idFuncion = Utilidades::isNull($this->Request["idFuncion"], "-1");

    try {
      $retorno = Pagina::verificarEliminacionFuncion($idFuncion);
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="EliminarPagina">
  /**
   * elimina una pagina
   * @param <type> $idPagina
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function eliminarPagina($idPagina) {
    $retorno = "";

    try {
      $retorno = Pagina::eliminarDatos($idPagina);
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="EliminarNotificacion">
  /**
   * elimina una notificacion
   * @return <type>
   * @author VSR, 07/04/2011
   */
  private function eliminarNotificacion() {
    $retorno = "";
    $idNotificacion = urldecode($this->Request["idNotificacion"]);

    try {
      $retorno = Notificacion::eliminarDatos($idNotificacion);
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="GrabarPaginaMenu">
  /**
   * grabra el id de la pagina seleccionada del menu en session
   * @param <type> $idPagina
   * @param <type> $session
   * @return <type>
   * @author VSR, 01/01/2011
   */
  private function grabarPaginaMenu($idPagina) {
    try {
      Utilidades::grabarSessionPorNombre(Pagina::SESION_ID_PAGINA_MENU_SELECCIONADA, $idPagina);
      $retorno = Sistema::CODIGO_SQL_EXITO;
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="GrabarEstadoNotificacion">
  /**
   * graba el estado de la notificacion seleccionada por el usuario
   * @return <type>
   * @author VSR, 11/04/2011
   */
  private function grabarEstadoNotificacion() {
    $idUsuario = $this->Request["idUsuario"];
    $idNotificacion = $this->Request["idNotificacion"];
    $estado = $this->Request["estado"];

    try {
      $retorno = Notificacion::grabarEstado($idUsuario, $idNotificacion, $estado);
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }

//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="ObtenerUsuariosPorPerfil">
  /**
   * obtiene el listado de usuarios por perfil
   * @author VSR, 14/04/2011
   */
  private function obtenerUsuariosPorPerfilJSON() {
    $retorno = "";
    $idPerfil = $this->Request["idPerfil"];
    $usuariosSeleccionados = $this->Request["usuariosSeleccionados"];

    try {
      $arr = Perfil::obtenerListadoUsuarios($idPerfil, $usuariosSeleccionados);
      if(!is_null($arr)) {
        $retorno = json_encode($arr);
      }
    } catch (Exception $e) {
      $retorno = Sistema::CODIGO_SQL_ERROR;
    }
    return $retorno;
  }
//</editor-fold>
  
//<editor-fold defaultstate="collapsed" desc="ObtenerEstadisticaNotificacion">
  /**
   * obtiene la estadistica de una notificacion
   * @author VSR, 18/04/2011
   */
  private function obtenerEstadisticaNotificacion() {
    $html = "";
    $idNotificacion = $this->Request["idNotificacion"];
    $estado = $this->Request["estado"];
    $htmlSinRegistro = "<span class=\"cssTextoNormal\"><i>No tiene estad&iacute;sticas asociadas</i></span>";
    $sb = new StringBuilder();

    try {
      $arr = Notificacion::obtenerEstadistica($idNotificacion, $estado);
      if(is_null($arr)) {
        $html = $htmlSinRegistro;
      } else {
        $totalRegistros = count($arr);
        if($totalRegistros == 0) {
          $html = $htmlSinRegistro;
        } else {
          $sb->appendLine("<div class=\"clearBoth cssTablaDatos\">");
          $sb->appendLine("  <table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" style=\"width:100%;border-width:0;\">");
          $sb->appendLine("    <tr>");
          $sb->appendLine("      <th style=\"width:20px;\">#</th>");
          $sb->appendLine("      <th style=\"width:200px;\">Nombre</th>");
          $sb->appendLine("      <th style=\"width:150px;\">Perfil</th>");
          $sb->appendLine("      <th style=\"width:150px;\">Fecha Visualizaci&oacute;n</th>");
          $sb->appendLine("      <th style=\"width:50px;\">Estado</th>");
          $sb->appendLine("    </tr>");

          for($i = 0; $i <= $totalRegistros - 1; $i++) {
            $row = $arr[$i];
            $nombreUsuario = Utilidades::isNull($row["NombreUsuario"],"&nbsp;");
            $nombrePerfil = Utilidades::isNull($row["NombrePerfil"],"&nbsp;");
            $fechaVisualizacion = Utilidades::isNull($row["FechaVisualizacion"],"");
            $estado = Utilidades::isNull($row["Estado"],"&nbsp;");

            //formatea valores
            $fechaVisualizacion = (Utilidades::isNullOrEmpty($fechaVisualizacion)) ? "&nbsp;" : $fechaVisualizacion." hrs.";

            //construye las filas
            $sb->appendLine("    <tr>");
            $sb->appendLine("      <td>".($i+1)."</td>");
            $sb->appendLine("      <td>$nombreUsuario</td>");
            $sb->appendLine("      <td>$nombrePerfil</td>");
            $sb->appendLine("      <td>$fechaVisualizacion</td>");
            $sb->appendLine("      <td>$estado</td>");
            $sb->appendLine("    </tr>");
          }
          $sb->appendLine("  </table>");
          $sb->appendLine("</div>");
          $html = $sb->toString();
        }
      }
    } catch (Exception $e) {
      $html = Sistema::CODIGO_SQL_ERROR;
    }
    return $html;
  }

//</editor-fold>

  public function onLoad($param) {
    parent::onLoad($param);
    $opcion = urldecode($this->Request["op"]);
    $idPagina = urldecode($this->Request["idPagina"]);
    $response = $this->getResponse();

    try {
      $session = new THttpSession();
      $session->open();
      $oUsuario = Utilidades::obtenerSessionPorNombre(Usuario::NOMBRE_ENTIDAD);
      switch ($opcion) {
        case "AutocompletarCategoria":
          $respuesta = $this->autocompletarCategoria();
          break;
        case "AutocompletarModulo":
          $respuesta = $this->autocompletarModulo();
          break;
        case "AutocompletarControlHtml":
          $respuesta = $this->autocompletarControlHtml();
          break;
        case "AutocompletarPaginaAsociada":
          $respuesta = $this->autocompletarPaginaAsociada();
          break;
        case "VerificarEliminacionFuncion":
          $respuesta = $this->verificarEliminacionFuncion();
          break;
        case "EliminarPagina":
          $respuesta = $this->eliminarPagina($idPagina);
          break;
        case "EliminarNotificacion":
          $respuesta = $this->eliminarNotificacion();
          break;
        case "Pagina.ModuloNombreClase":
          $respuesta = $this->verificarDuplicidadNombre();
          break;
        case "GrabarPaginaMenu":
          $respuesta = $this->grabarPaginaMenu($idPagina);
          break;
        case "GrabarEstadoNotificacion":
          $respuesta = $this->grabarEstadoNotificacion();
          break;
        case "ObtenerUsuariosPorPerfil":
          $respuesta = $this->obtenerUsuariosPorPerfilJSON();
          break;
        case "ObtenerEstadisticaNotificacion":
          $respuesta = $this->obtenerEstadisticaNotificacion();
          break;
        default:
          $respuesta = Sistema::CODIGO_SQL_ERROR;
          break;
      }
      $response->write($respuesta);

    } catch (Exception $e) {
      $response->write(Sistema::CODIGO_SQL_ERROR);
    }
  }
  
}

?>
